package com.chhuang.ewcrm.dao;

import com.chhuang.ewcrm.entity.WCamera;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * (WCamera)表数据库访问层
 *
 * @author chhuang
 * @since 2020-10-24 14:13:45
 */
@Mapper
public interface WCameraDao {

    /**
     * 通过ID查询单条数据
     *
     * @param cameraId 主键
     * @return 实例对象
     */
    WCamera queryById(@NotNull String cameraId);

    /**
     * 通过多个ID查询多条数据
     *
     * @param list<WCamera> 主键列表
     * @return 对象列表
     */
    List<WCamera> queryByIds(@NotEmpty List<String> list);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param wCamera 实例对象
     * @return 对象列表
     */
    List<WCamera> query(WCamera wCamera);

    /**
     * 新增数据
     *
     * @param wCamera 实例对象
     * @return 影响行数
     */
    int insert(@NotNull WCamera wCamera);

    /**
     * 新增多条数据
     *
     * @param list<WCamera> 对象列表
     * @return 影响行数
     */
    int insertBatch(@NotEmpty List<WCamera> list);

    /**
     * 修改数据
     *
     * @param wCamera 实例对象
     * @return 影响行数
     */
    int update(@NotNull WCamera wCamera);

    /**
     * 通过表字段修改实体属性不为null的列
     *
     * @param where 条件实例对象
     * @param set   修改实例对象
     * @return 影响行数
     */
    int updateByField(@NotNull @Param("where") WCamera where, @NotNull @Param("set") WCamera set);

    /**
     * 通过主键修改实体列表，列表长度不能为0，
     * 注意：当实体属性为null时，对应的列也会别更新为null
     *
     * @param list<WCamera> 对象列表
     * @return 影响行数
     */
    int updateBatch(@NotEmpty List<WCamera> list);

    /**
     * 通过主键删除数据
     *
     * @param cameraId 主键
     * @return 影响行数
     */
    int deleteById(@NotNull String cameraId);

    /**
     * 通过实体非空属性删除
     *
     * @param wCamera 条件实例对象
     * @return 影响行数
     */
    int deleteByEntity(@NotNull WCamera wCamera);

    /**
     * 通过多条主键删除多条数据
     *
     * @param list<String> 主键列表
     * @return 影响行数
     */
    int deleteByIds(@NotEmpty List<String> list);

    /**
     * 通过实体非空属性计数
     *
     * @param wCamera 条件实例对象
     * @return 行数
     */
    int count(WCamera wCamera);

}